Hive的列分隔符和行分隔符

您所在的位置:网站首页 hive替换/001 Hive的列分隔符和行分隔符

Hive的列分隔符和行分隔符

2024-01-07 05:12| 来源: 网络整理| 查看: 265

在创建Hive表时,默认行分隔符"^A",列分隔符"\n",这两项也是可以设置的。在实际开发中,一般默认使用默认的分隔符,当然有些场景下也会自定义分隔符。

创建表1: spark-hive use test_db; # 创建外部表 CREATE EXTERNAL TABLE test_tb ( user_id bigint COMMENT '用户ID', user_name string COMMENT '用户名' ) LOCATION '/home/test_db/test_tb' ; 查看表1: show create table test_tb; 20/04/13 11:47:49 INFO SparkHiveShell: current SQL: show create table test_tb CREATE EXTERNAL TABLE `test_tb`( `user_id` bigint COMMENT '用户ID', `user_name` string COMMENT '用户名') ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' # 默认分隔符,行分割符:"\n",列分割符:"^A" STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' # 默认存储格式textfile OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' # HDFS存储目录 LOCATION 'hdfs://namenode.xxx.com:9000/home/test_db/test_tb' TBLPROPERTIES ( 'transient_lastDdlTime'='1586749208') Time taken: 1.702 s 创建表2: CREATE EXTERNAL TABLE test_tb_2 ( user_id bigint COMMENT '用户ID', user_name string COMMENT '用户名' ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' LOCATION '/home/test_db/test_tb_2' ; 查看表2: show create table test_tb_2; 20/04/13 11:55:22 INFO SparkHiveShell: current SQL: show create table test_tb_2 CREATE EXTERNAL TABLE `test_tb_2`( `user_id` bigint COMMENT '用户ID', `user_name` string COMMENT '用户名') ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' # 列分割符,表2的列分割符为:"\t" LINES TERMINATED BY '\n' # 行分割符,表2的行分隔符为:"\n" STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 'hdfs://namenode.xxx.com:9000/home/test_db/test_tb_2' TBLPROPERTIES ( 'transient_lastDdlTime'='1586749805') Time taken: 2.485 s

从如上两个例子中可以看出:Hive默认的列分隔符类型为“org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe”。

Hive中默认的列分割符为:"^A"(CTRL+V,CTRL+A),在数据文件中为:"1^AJom\n",如果需要自定义分隔符,需要设置 "ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'",因为^A八进制编码为“\001”,如果使用默认的分隔符,可以不加此参数。

Hive中默认行分隔符为"\n",也可以通过"LINES TERMINATED BY '\n' "来设置。

一般来说Hive默认行分隔符为换行符,如果非要自定义分隔符,可以通过定义INPUTFORMAT和OUTPUTFORMAT类来指定特定的(行|列)分隔符。

提示

使用时需要注意:数据中如果包含:"\001","\n"等分隔符,需要提前处理掉。正常在HQL中我们需要REGEXP_REPLACE(字段,'\r|\n|\r\n|\001|\002|\003|\t', '')把常用的分隔符转移掉,免得带来串列,断行的困扰。

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3